/***
 *
 */

describe('1. 新增关键字 let, const, import, export, class', () => {

    it('1. 全局变量不会绑定到window', () => {
        var a = 10;
        console.log(a);
        // TODO 浏览器测试
        // console.log(window.a);
        // let a = 10;
        // console.log(a);
        // console.log(window.a);
    });

    test('2. let声明的变量不存在提升', function () {
        // var 的情况
        console.log(foo); // 输出undefined
        var foo = 2;

        // let 的情况
        console.log(bar); // 报错ReferenceError
        let bar = 2;
    });

    it('3. 存在块级作用域，花括号就是一个作用域', () => {
        if(true){
            var a = 10;
        }
        console.log(a)

        expect(() => {
            {
                let b = 10;
            }
            console.log(b)
        }).toThrow(ReferenceError);
    });

    it('4. 不允许重复声明同一个变量', () => {
        var a = 10;
        var a = 20;
        console.log(a);

        // let b = 10;
        // let b = 20;
        // console.log(b);
    });

    it('5. 存在暂时性死区', () => {
        function fn(a){
            var a;
            console.log(a);
        }
        fn("hello");

        // function fn(b){
        //     let b;
        // }
        // fn("hello")
    });

    it('let和const 1', () => {
        let a = 10;
        a = 20;
        console.log(a);
        // const声明的变量，不允许修改地址，可以改值
    });

    it('let和const const 声明的是常量 编译错误 2', () => {
        // const b = 10;
        // b = 20;
        // console.log(b);
    });

    it('let和const 3', () => {
        const obj = {
            name: "admin"
        };
        obj.name = "root";
        console.log(obj);
    });


});

